
//1814.统计一个数组中好对子的数目
class Solution {
    #define MOD 1000000007
public:
    int countNicePairs(vector<int>& nums) {
        //根据题目nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
        //将i和j移到同一侧即可：rev(nums[i]) - nums[i]  == nums[j] - rev(nums[j])

        int n=nums.size();
        unordered_map<int,int> m; //存储左边所有的rev(nums[i])-nums[i]的值

        //rev反转函数
        auto rev=[](int x)
        {
            int ret=0;
            while(x)
            {
                ret=ret*10+x%10;
                x/=10;
            }
            return ret;
        };

        long long ans=0;
        for(int i=0;i<n;i++)
        {
            int now=rev(nums[i])-nums[i];
            if(m.count(now)) ans+=m[now];

            m[now]++;
        }
        return ans%MOD;
    }
};